/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controladores;

import Entidades.Contrato;
import Entidades.Detallecontrato;
import Entidades.Recepcion;
import java.util.Iterator;
import java.util.List;

import Entidades.Detallerecepcion;
import Entidades.Estadocontrato;
import java.util.logging.Level;
import java.util.logging.Logger;
import logica.jpaControllers.RecepcionJpaController;

/**
 *
 * @author Anali
 */
public class AnalizarContrato {
// Calcula la cantidad entregada para poder evaluar si ha sido Finalizado ese detalle de recepción y en caso de que haya finalizado verificar si ha finalizado el contrato

    public float calcularCantidadPendiente(Detallerecepcion detallerecepcion) throws Exception {
        float cantidadEntregada = 0;
        float cantidadTotaldeProducto = 0;
        CtrlEstadocontrato ctrlEstadoContrato = new CtrlEstadocontrato();
        Estadocontrato estadoContrato = ctrlEstadoContrato.buscarEstadocontratoNombre("COMPLETO");
        RecepcionJpaController recepcionJpa = new RecepcionJpaController();
        Contrato contrato = detallerecepcion.getRecepcion().getContrato();
        List<Recepcion> recepcionesDelContrato = recepcionJpa.buscarContrato(contrato);
        for (Iterator<Recepcion> it = recepcionesDelContrato.iterator(); it.hasNext();) {
            Recepcion recepcion = it.next();
            List<Detallerecepcion> detRecepcion = (List<Detallerecepcion>) recepcion.getDetallerecepcionCollection();
            for (Iterator<Detallerecepcion> it1 = detRecepcion.iterator(); it1.hasNext();) {
                Detallerecepcion detallerecepcion1 = it1.next();
                if (detallerecepcion1.getEstadoespera().getNombreEstadoEspera().equalsIgnoreCase("Finalizado") && (detallerecepcion1.getProducto().getNombreProducto().equals(detallerecepcion.getProducto().getNombreProducto()))) {
                    cantidadEntregada += detallerecepcion1.getPesajesalida().getPesoneto();

                }

            }
        }
        List<Detallecontrato> detallesContrato = (List<Detallecontrato>) contrato.getDetallecontratoCollection();
        for (Iterator<Detallecontrato> it = detallesContrato.iterator(); it.hasNext();) {
            Detallecontrato detallecontrato = it.next();
            if (detallecontrato.getProducto().getNombreProducto().equals(detallerecepcion.getProducto().getNombreProducto())) {
                cantidadTotaldeProducto += detallecontrato.getCantidad();
            }


        }
        // Actualiza el estado de los detalle de contrato a "COMPLETO" en caso de que ese detalle de contrato se haya cumplido en funcion de las recepciones entregadas

        if (cantidadTotaldeProducto <= cantidadEntregada) {
            for (Iterator<Detallecontrato> it = detallesContrato.iterator(); it.hasNext();) {
                Detallecontrato detallecontrato = it.next();
                if (detallecontrato.getProducto().getNombreProducto().equals(detallerecepcion.getProducto().getNombreProducto())) {
                    detallecontrato.setEstadocontrato(estadoContrato);
                    CtrlDetallecontrato ctrlContrato = new CtrlDetallecontrato();
                    ctrlContrato.modificarDetallecontrato(detallecontrato);
                }

            }



        }
        CalcularEstadoContrato(contrato);
        // Actualiza el estado Contrato a Completo en caso de que los detalles de Contrato estén todos Finalizados o completos
        return cantidadEntregada;
    }
// Actualiza el estado Contrato a Completo en caso de que los detalles de Contrato estén todos Finalizados o completos

    private void CalcularEstadoContrato(Contrato contrato) {
        boolean detallesFinalizados = true;
        List<Detallecontrato> detallesContrato = (List<Detallecontrato>) contrato.getDetallecontratoCollection();
        for (Iterator<Detallecontrato> it = detallesContrato.iterator(); it.hasNext();) {
            Detallecontrato detallecontrato = it.next();
            if (!detallecontrato.getEstadocontrato().getNombre().equalsIgnoreCase("COMPLETO") || !detallecontrato.getEstadocontrato().getNombre().equalsIgnoreCase("FALTANTE")) {
                detallesFinalizados = false;
                CtrlContrato ctrlContrato = new CtrlContrato();
                try {
                    ctrlContrato.modificarContrato(contrato);
                } catch (Exception ex) {
                    Logger.getLogger(AnalizarContrato.class.getName()).log(Level.SEVERE, null, ex);
                }
            }


        }
    }
    public float calcularCantidadPendiente(Detallecontrato detallecontrato) throws Exception {
        float cantidadEntregada = 0;
        float cantidadTotaldeProducto = 0;
        CtrlEstadocontrato ctrlEstadoContrato = new CtrlEstadocontrato();
       // Estadocontrato estadoContrato = ctrlEstadoContrato.buscarEstadocontratoNombre("COMPLETO");
        RecepcionJpaController recepcionJpa = new RecepcionJpaController();
        Contrato contrato = detallecontrato.getContrato();
        List<Recepcion> recepcionesDelContrato = recepcionJpa.buscarContrato(contrato);
        for (Iterator<Recepcion> it = recepcionesDelContrato.iterator(); it.hasNext();) {
            Recepcion recepcion = it.next();
            List<Detallerecepcion> detRecepcion = (List<Detallerecepcion>) recepcion.getDetallerecepcionCollection();
            for (Iterator<Detallerecepcion> it1 = detRecepcion.iterator(); it1.hasNext();) {
                Detallerecepcion detallerecepcion1 = it1.next();
                if (!detallerecepcion1.getEstadoespera().getNombreEstadoEspera().equalsIgnoreCase("Finalizado") && (detallerecepcion1.getProducto().getNombreProducto().equals(detallecontrato.getProducto().getNombreProducto()))) {
                    cantidadEntregada += detallerecepcion1.getPesajesalida().getPesoneto();

                }

            }
        }
//        List<Detallecontrato> detallesContrato1 = (List<Detallecontrato>) contrato.getDetallecontratoCollection();
//        for (Iterator<Detallecontrato> it = detallesContrato1.iterator(); it.hasNext();) {
//            Detallecontrato detallecontrato1 = it.next();
//            if (detallecontrato1.getProducto().getNombreProducto().equals(detallecontrato.getProducto().getNombreProducto())) {
//                cantidadTotaldeProducto += detallecontrato1.getCantidad();
//            }
//
//
//        }
//        // Actualiza el estado de los detalle de contrato a "COMPLETO" en caso de que ese detalle de contrato se haya cumplido en funcion de las recepciones entregadas

//        if (cantidadTotaldeProducto <= cantidadEntregada) {
//            for (Iterator<Detallecontrato> it = detallesContrato.iterator(); it.hasNext();) {
//                Detallecontrato detallecontrato = it.next();
//                if (detallecontrato.getProducto().getNombreProducto().equals(detallerecepcion.getProducto().getNombreProducto())) {
//                    detallecontrato.setEstadocontrato(estadoContrato);
//                }






       // CalcularEstadoContrato(contrato);
        // Actualiza el estado Contrato a Completo en caso de que los detalles de Contrato estén todos Finalizados o completos
        return cantidadEntregada;
    }
}
